diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-29 08:01:53 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-29 08:01:53 +0000 |
| commit | c7d37ec3e60c9197abc79738316ddae7c5bf8817 (patch) | |
| tree | 9b045c7b7302d55f43d76565aa4fd5c6dd3a097b /app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx | |
| parent | 82a2ce067c9b690cdf7775dfb0be94583f51ca29 (diff) | |
(대표님) 그룹라우터로 앱라우터 경로 정리
Diffstat (limited to 'app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx')
| -rw-r--r-- | app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx b/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx new file mode 100644 index 00000000..38b43680 --- /dev/null +++ b/app/[lng]/evcp/(evcp)/(system)/approval/line/page.tsx @@ -0,0 +1,69 @@ +import * as React from 'react'; +import { type Metadata } from 'next'; +import { Shell } from '@/components/shell'; +import { DataTableSkeleton } from '@/components/data-table/data-table-skeleton'; +import { type SearchParams } from '@/types/table'; +import { getValidFilters } from '@/lib/data-table'; + +import { getApprovalLineList } from '@/lib/approval-line/service'; +import { SearchParamsApprovalLineCache } from '@/lib/approval-line/validations'; +import { ApprovalLineTable } from '@/lib/approval-line/table/approval-line-table'; + +export const metadata: Metadata = { + title: '결재선 관리', + description: '결재용 결재선을 관리합니다.', +}; + +interface PageProps { + searchParams: SearchParams; +} + +export default async function ApprovalLinePage({ searchParams }: PageProps) { + const search = SearchParamsApprovalLineCache.parse(searchParams); + // getValidFilters 반환값이 undefined 인 경우 폴백 + const validFilters = getValidFilters(search.filters) ?? []; + + const promises = Promise.all([ + getApprovalLineList({ + ...search, + filters: validFilters, + }), + ]); + + return ( + <Shell className="gap-2"> + <div className="flex items-center justify-between space-y-2"> + <div className="flex items-center justify-between space-y-2"> + <div> + <div className="flex items-center gap-2"> + <h2 className="text-2xl font-bold tracking-tight">결재선 관리</h2> + </div> + </div> + </div> + </div> + + {/* 테이블 */} + <React.Suspense + fallback={ + <DataTableSkeleton + columnCount={7} + searchableColumnCount={1} + filterableColumnCount={2} + cellWidths={[ + '10rem', + '20rem', + '12rem', + '30rem', + '12rem', + '12rem', + '8rem', + ]} + shrinkZero + /> + } + > + <ApprovalLineTable promises={promises} /> + </React.Suspense> + </Shell> + ); +} |
